package com.atguigu.pj

import com.atguigu.cm.util.MySparkContextCMUtil
import com.atguigu.pj.app.{QueryCategoryTop10, QueryPageSkipRate, QuerySessionTop10ByCategory}
import com.atguigu.pj.bean.{CategoryCountInfo, CategorySession, UserVisitAction}
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD

/**
 * description ：spark-core-project项目入口
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/1/10 7:19
 * modified By ：
 * version:    : 1.0
 */
object Apps {

  def main(args: Array[String]): Unit = {

    // 创建sparkContext
    val sc: SparkContext = MySparkContextCMUtil.get(args)

    // 读取源数据
    val rdd = sc.textFile("F:\\file\\尚硅谷相关资料\\003spark\\2019_08_30\\01_spark\\02_资料\\user_visit_action.txt", 5)

    // 处理数据，封装成bean对象 List[UserVisitAction]
    val list: RDD[UserVisitAction] = rdd.map {
      line =>
        val splits = line.split("_")
        UserVisitAction(
          splits(0),
          splits(1).toLong,
          splits(2),
          splits(3).toLong,
          splits(4),
          splits(5),
          splits(6).toLong,
          splits(7).toLong,
          splits(8),
          splits(9),
          splits(10),
          splits(11),
          splits(12).toLong)
    }

    /**
     * TODO 需要处理
     * TODO 1、Top10 热门品类  按照每个品类的 点击、下单、支付 的量来统计热门品类（按点击，下单，支付数量来排序，如果相同，就按下一个指标排序）
     * TODO 2、Top10热门品类中每个品类的 Top10 活跃 Session 统计，这里只关注点击次数
     * TODO 3、页面单跳转化率统计
     **/

    // TODO 1、Top10 热门品类  按照每个品类的 点击、下单、支付 的量来统计热门品类（按点击，下单，支付数量来排序，如果相同，就按下一个指标排序）
    val categoryTop10List: List[CategoryCountInfo] = QueryCategoryTop10.doQuery(sc, list)
    println("-------------------D 1、Top10 热门品类--------------------")
    println(categoryTop10List)

    // TODO 2、Top10热门品类中每个品类的 Top10 活跃 Session 统计，这里只关注点击次数
    val sessionTop10ByCetagory: RDD[List[CategorySession]] = QuerySessionTop10ByCategory.doQueryAllSort(sc, list, categoryTop10List)
    println("-------------------D 2、Top10热门品类中每个品类的 Top10--------------------")
    sessionTop10ByCetagory.collect().foreach(println)

    println("-------------------D 22、Top10热门品类中每个品类的 Top10 分区内排序--------------------")
    QuerySessionTop10ByCategory.doQuerySingelPartitionSort(sc, list, categoryTop10List)


    println("-------------------D 23、Top10热门品类中每个品类的 Top10 treeSet排序--------------------")
    QuerySessionTop10ByCategory.doQueryTreeset(sc, list, categoryTop10List)

    // TODO 3、页面单跳转化率统计
    println("-------------------D 3、页面单跳转化率统计--------------------")
    QueryPageSkipRate.doQuery(sc, list, "1,2,3,4,5，6,7,8,9,10")


    // 关闭sparkContext资源
    MySparkContextCMUtil.close(sc)
  }

}
